const { series, parallel, src, dest, watch } = require('gulp')

function clean(cb){
    // 清理内存
    console.log('this is clean function')
    cb()
}
// function cssTranspile(cb){
//     // 转义css
//     console.log('this is cssTranspile function')
//     cb()
// }
function minCss(cb){
    // 压缩css
    console.log('this is minCss function')
    cb()
}
// function jsTranspile(cb){
//     // 转义js
//     console.log('this is jsTranspile function')
//     cb()
// }
function minJs(cb){
    // 压缩js
    console.log('this is minJs function')
    cb()
}
function publish(cb){
    // 发布
    console.log('this is slide function')
    cb()
}
// exports.default = series(javaScript,clean,css)  // 串联执行
// exports.default = series(clean,parallel(cssTranspile,jsTranspile),parallel(minCss,minJs),publish)    // 并联执行
const concatJs = require('gulp-concat')   // 作用作为合并js文件使用
const uglifyJs = require('gulp-uglify')   // 作为压缩js文件使用
const less = require('gulp-less')
const concatCss = require('gulp-concat-css')   // 作用作为合并css文件使用
const cleanCss = require('gulp-clean-css')  // 压缩css文件
const rename = require('gulp-rename')   // 作为重命名文件 使用
const htmlMin = require('gulp-htmlmin') // 最小化html
const livereload = require('gulp-livereload')   // 实时加载
const connect = require('gulp-connect')
function cssTranspile(){
    // 转义css    --返回stream
    return src(['src/css/*.css','src/less/*.less'])
        .pipe(less())
        .pipe(concatCss('bundle.css')) // 合并成bundle.css文件
        .pipe(cleanCss()) // 压缩文件
        .pipe(rename({ extname:'.min.css' }))   // 重命名
        .pipe(dest('dist/css')) // 输出文件
        // .pipe(livereload())
        .pipe(connect.reload())

}
function jsTranspile() {
    return src('src/js/*.js')
        .pipe(concatJs('bundle.js'))    // 合并js文件
        .pipe(uglifyJs())   // 压缩js文件
        .pipe(rename({extname:'.min.js'}))  // 重命名
        .pipe(dest('dist/js'))
        // .pipe(livereload())
        .pipe(connect.reload())

}

function htmlTranspile(){
    return src('index.html')
        .pipe(htmlMin({collapseWhitespace:true}))
        .pipe(dest('dist/'))
        // .pipe(livereload())
        .pipe(connect.reload())
}
// 创建监听任务
function watchEvent(){
    livereload.listen()
    watch('src/js/*.js',{events:'change'}, jsTranspile)
    watch(['src/css/*.css','src/less/*.less'],{events:'change'},cssTranspile)
}

function connectEvent() {
    watch('src/js/*.js',{events:'change'}, jsTranspile)
    watch(['src/less/*.less','src/css/*.css'],{events:'change'},cssTranspile)
    connect.server({livereload:true,port:5000});
}
exports.connectEvent = connectEvent
// exports.default = series(parallel(cssTranspile,jsTranspile),htmlTranspile)
